//给你两个二进制字符串，返回它们的和（用二进制表示）。 
//
// 输入为 非空 字符串且只包含数字 1 和 0。 
//
// 
//
// 示例 1: 
//
// 输入: a = "11", b = "1"
//输出: "100" 
//
// 示例 2: 
//
// 输入: a = "1010", b = "1011"
//输出: "10101" 
//
// 
//
// 提示： 
//
// 
// 每个字符串仅由字符 '0' 或 '1' 组成。 
// 1 <= a.length, b.length <= 10^4 
// 字符串如果不是 "0" ，就都不含前导零。 
// 
// Related Topics 位运算 数学 字符串 模拟 
// 👍 715 👎 0

package com.cute.leetcode.editor.cn;
public class AddBinary {
    public static void main(String[] args) {
        new AddBinary().new Solution().addBinary("111000", "1100");
    }
    //leetcode submit region begin(Prohibit modification and deletion)

    /**
     * 不能直接算，字符串太长的话转类型都转不过来
     * 只能一位一位的计算添加
     */
    class Solution {
        public String addBinary(String a, String b) {
            //使用两个指针指向字符串末尾，即最低位
            int indexA = a.length()-1;
            int indexB = b.length()-1;
            int i = 0;
            StringBuilder sb = new StringBuilder();
            while (indexA>=0||indexB>=0){//只要还有一个字符串没遍历完就继续
                int sum = i;
                if (indexA>=0) {
                    sum += Integer.parseInt(a.substring(indexA, indexA+1));
                }
                if (indexB>=0) {
                    sum += Integer.parseInt(b.substring(indexB, indexB+1));
                }
                //对相加结果进行判断，可以写为另一种方法
                sb.append(sum%2);
                i = sum/2;
                /*if (sum<=1){
                    sb.append(sum);
                    i = 0;
                }else if (sum==2){
                    sb.append(0);
                    i = 1;
                }else if (sum == 3){
                    sb.append(1);
                    i = 1;
                }*/
                indexA--;
                indexB--;
            }
            if (i==1) sb.append(1);//如果还有进位的话需要再进行一次添加
            return sb.reverse().toString();//反转输出
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}